package j12;

public class J12_SungJuk_v4b {

	public static void main(String[] args) {
		//접근지정자를 이용해서 SungJuk 클래스 정의
		J12SungJuk sj = new J12SungJuk();
		//sj.name = "지현";
		//name 멤버변수는 접근 지정자가 private이므로 위 코드 처럼 작성하면 오류 발생!
		//sj = new J12SungJuk("지현", 89,48,75);
		//어쩔수 없이 생성자를 이용해서
		//name,kor,eng,mat 멤버변수들 초기화함
		//System.out.println();
		//하지만, 기존 방식으로 name변수를 출력하려해도 private접근 지정자 떄문에 오류 발생!
		//따라서, private으로 선언된 멤버변수를 조작하거나 값을 읽어오려면
		//그것을 위한 특별한 메서드를 작성하는 것이 좋음
		//실무에서는 setter/getter 메서드를 작성함
		sj.setName("수지");
		sj.setKor(89);
		sj.setEng(58);
		sj.setMat(55);
		
		System.out.println(sj.getName());
		System.out.println(sj.getTot());
		System.out.println(sj.getAvg());
		System.out.println(sj.toString());
		
		
	} //main

} //class

class J12SungJuk {
	

	private String name;
	private int kor;
	private int eng;
	private int mat;
	
	private int tot;
	private double avg;
	private char grd;
	
	
	public J12SungJuk() {}
	public J12SungJuk(String name, int kor, int eng, int mat, int tot, double avg, char grd) {
		this.name =name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
		this.tot = (kor+eng+mat);
		this.avg = tot/3;
		this.grd = grd;
	}
	
	//setter 메서드 : 멤버변수의 값을 set(놓다)
	//public void set멤버변수명( 자료형 멤버변수명 ) {
	//		this.멤버변수명 = 멤버변수명;
	//}
	public void setName(String name) {
		this.name = name;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public void setTot(int tot) {
		this.tot = tot;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public void setGrd(char grd){
		this.grd = grd;
	}
	//getter 메서드 : 멤버변수의 값을 get(읽어온다)하기 위한 메서드
	//public 멤버변수 자료형 get멤버 변수명( ){
	// return 멤버변수명;
	//}
	public String getName(){
		return name;
	}
	public int getKor(){
		return kor;
	}
	public int getEng(){
		return eng;
	}
	public int getMat(){
		return mat;
	}
	public int getTot(){
		tot=kor+eng+mat;
		//setTot(kor+eng+mat);
		return tot;
	}
	public double getAvg(){
		avg= tot/3;
			return avg;
	}
	
	public char getGrd(){
		switch((int)avg/10){
		case 10: case9:  grd = '수'; break;
		case 8:			 grd = '우'; break;
		case 7: 		 grd = '미'; break;
		case 6:			 grd = '양'; break;
		default: 		 grd = '가';
			
		}
		return grd;
	}
	//멤버변수의 모든 값을 출력하기 위해
	//Object 클래스에서 기본으로 제공하는
	//메서드인 toString()을 재정의override
	@Override  //어노테이션 : 컴파일러를 위한 주석
	public String toString() {
		String result = "";
		result = result+"이름 : "+name;
		result = result+" 국어 : "+kor;
		result = result+" 영어 : "+eng;
		result = result+" 수학 : "+mat;
		result = result+" 총점 : "+getTot();
		result = result+" 평균 : "+getAvg();
		result = result+" 학점 : "+getGrd();
		return result;
		 
	}
	}



